/* 
    在 MATLAB 中，有一个非常有用的函数 reshape ，它可以将一个 m x n 矩阵重塑为另一个大小不同（r x c）的新矩阵，但保留其原始数据。

    给你一个由二维数组 mat 表示的 m x n 矩阵，以及两个正整数 r 和 c ，分别表示想要的重构的矩阵的行数和列数。

    重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。

    如果具有给定参数的 reshape 操作是可行且合理的，则输出新的重塑矩阵；否则，输出原始矩阵。

    输入：mat = [[1,2],[3,4]], r = 1, c = 4
    输出：[[1,2,3,4]]

    要点：
    二维坐标映射为一维位置
    (i,j)→i×n+j
    同样地，可以将整数 x 映射回其在矩阵中的下标，即
    i = x/ n
    j = x % n

​
*/

/**
 * @param {number[][]} mat
 * @param {number} r
 * @param {number} c
 * @return {number[][]}
 */
var matrixReshape = function(mat, r, c) {
    // 获取行列数
    const m=mat.length
    const n=mat[0].length
    // 如果行列数乘积不一致则返回原数组
    if(m*n!==r*c){
        return mat
    }

    // 按照r,c创建一个二维数组
    const arr=new Array(r).fill(0).map(item=>new Array(c).fill(0))
    // 新二维数组的元素从原二维数组获取
    for (let x = 0; x < m*n; x++) {
        // 通过一个整数x映射在二维数组中的下标
        arr[Math.floor(x / c)][x % c] = mat[Math.floor(x / n)][x % n];
    }

};

let mat = [[1,2],[3,4]], r = 1, c = 4
matrixReshape(mat, r, c)